草庐IT

Java Swingworker 和多线程

全部标签

c++ - 如何在类函数中创建线程?

我是C++的新手。我有一个类,我想在类的函数中创建一个线程。该线程(函数)也将调用和访问类函数和变量。一开始我尝试使用Pthread,但只能在类之外工作,如果我想访问类函数/变量,我会遇到超出范围的错误。我看了一下Boost/thread,但这是不可取的,因为我不想将任何其他库添加到我的文件中(出于其他原因)。我做了一些研究,但找不到任何有用的答案。请举一些例子来指导我。非常感谢!尝试使用pthread(但我不知道如何处理我上面所说的情况):#includevoid*print(void*data){std::cout 最佳答案 您

c++ - 我可以在从另一个线程插入/删除时访问 C++11 std::map 条目吗?

我可以在另一个线程插入/删除条目时访问(不锁定)std::map条目吗?示例伪C++:typedefstruct{intvalue;intstuff;}some_type_t;std::mapmy_map;//thread1does:my_map.at('a')->value=1;//thread2does:some_type_t*stuff=my_map.at('b');//thread3does:my_map.erase('c');//I'mnotmodifyinganyelementsTisapointertoanpreviouslyallocated"some_type_t"s

c++ - 单例和多线程

我有以下类(class)classSingleton{private:staticSingleton*p_inst;Singleton();public:staticSingleton*instance(){if(!p_inst){p_inst=newSingleton();}returnp_inst;}};请详细说明在多线程环境下实现单例的注意事项。 最佳答案 在多线程中那个子句if(!p_inst){p_inst=newSingleton();}实际上是3个独立的操作。您正在获取p_inst的值,设置p_inst的值并写入p_i

c++ - 当 STL 容器对象的值不可复制构造时,如何将其附加/复制到另一个对象,例如标准::线程

我想将一个std::map容器对象移动到另一个。最简单的形式:#include#include#includeusingnamespacestd;intmain(){map>m1,m2;//m1isupdatedm1.insert(m2.begin(),m2.end());//但是它给出了error的页面:error:useofdeletedfunction‘std::thread::thread(conststd::thread&)’如何实现? 最佳答案 std::thread不可复制构造,您必须使用允许移动的迭代器:m1.ins

c++ - 有史以来最简单的互斥量。这个例子行得通吗?它是线程安全的吗?

我想问一下用于多线程的最简单的Mutex方法。以下代码是线程安全的(quick-n-dirty)吗?classmyclass{boollocked;vectorvals;myclass();voidadd(doubleval);};voidmyclass::add(doubleval){if(!locked){this->locked=1;this->vals.push_back(val);this->locked=0;}else{this->add(val);}}intmain(){myclasscls;//startparallelismcls.add(static_cast(ra

c++ - 在c++中运行类成员函数的线程

正如标题所说。以下是我的代码框架。classCLASS{public:voidA();private:DWORDWINAPIB(LPVOID);};voidCLASS::A(){DWORD(WINAPICLASS::*thread)(LPVOID)=&CLASS::B;...CreateThread(NULL,0,thread,&arg,0,NULL);...}函数B需要CLASS的成员变量。但是当我编译这个时我得到了一个错误代码。它是“无法将参数3从‘DWORD(__stdcallCLASS::*)(LPVOID)’转换为‘LPTHREAD_START_ROUTINE’”或类似的东西

c++ - C , C++ 非同步线程返回一个奇怪的结果

好的,我有一个关于线程的问题。有两个非同步线程同时运行并使用全局资源“intnum”第一:voidThread(){inti;for(i=0;i第二个:voidThread2(){intj;for(j=0;j问题指出:程序末尾变量“num”的可能值是什么。现在我会说0将是程序末尾num的值,但是,尝试运行这段代码,你会发现结果是相当随机的,我不明白为什么?完整代码:#include#include#includeintstaticnum=0;voidThread(){inti;for(i=0;i 最佳答案 num++和num--不必

c++ - C++ 中 "low-level"多线程的基本示例是什么?

我是一名开发新手,有几年的经验。最近在一家游戏公司面试,被问“你做过多线程吗?”我告诉他们有一个带有几个线程的C#应用程序......然后我说了一些关于Sql中的事务和锁定等。面试官礼貌地告诉我,这太高级了,他们正在寻找有C++多线程经验的人。那么C++中“低级”多线程的基本示例是什么? 最佳答案 “低级线程”的规范实现是pthreads.通常与pthreads一起教授的线程问题的最基本示例是某种形式的readersandwritersproblem.该页面还链接到更经典的线程问题,如生产者/消费者和用餐哲学家。

c++ - 如何设计多线程应用程序

我有一个多线程应用程序。每个模块都在一个单独的线程中执行。模块是:-networkmodule-usedtoreceive/senddatafromnetwork-parsermodule-encode/decodenetworkdatatointernalpresentation-2applicationmodule-performsomeapplicationlogicontheabovedataoneafterother-countermodule-usedtogatherstatisticsfromothermodules-timermodule-usedtoschedulet

c++ - 多线程C++程序性能不佳

我有一个在Linux上运行的C++程序,在其中创建了一个新线程来独立于主线程进行一些计算量大的工作(通过将结果写入文件来完成计算工作,最终结果非常大)。但是,我的性能相对较差。如果我直接实现该程序(不引入其他线程),它将在大约2个小时内完成任务。使用多线程程序需要大约12个小时才能完成相同的任务(仅在产生一个线程的情况下进行了测试)。我尝试了几件事,包括pthread_setaffinity_np将线程设置为单个CPU(我正在使用的服务器上的24个可用线程),以及pthread_setschedparam设置调度策略(我只尝试了SCHED_BATCH)。但是到目前为止,这些影响可以忽略